using System;
using System.Collections;
using System.Collections.Generic;

namespace Neturion.Dados
{
    /// <summary>
    /// 
    /// </summary>
    public class Endereco
    {
        private int _enderecoId;
        private string _codigo;
        private string _numero;
        private string _complemento;
        private string _caixaPostal;
        private bool _flagCobranca;
        private bool _flagCorrespondencia;
        private bool _flagFaturamento;
        private bool _flagPublicacao;
        private string _observacao;
        private string _horaInicial;
        private string _horaFinal;
        private Logradouro _logradouro;
        private IList _listaTelefones;
        private DateTime? _inicioVigencia;
        private DateTime? _fimVigencia;
        private EnumTipoResidencia _enumTipoResidencia;
        private NeturionLog _neturionLog;
        private Pessoa _pessoa;

        public Endereco()
        {
            _listaTelefones = new List<Telefone>();
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual int EnderecoId
        {
            get { return _enderecoId; }
            set { _enderecoId = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Codigo
        {
            get { return _codigo; }
            set { _codigo = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Numero
        {
            get { return _numero; }
            set { _numero = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Complemento
        {
            get { return _complemento; }
            set { _complemento = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CaixaPostal
        {
            get { return _caixaPostal; }
            set { _caixaPostal = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual bool FlagCobranca
        {
            get { return _flagCobranca; }
            set { _flagCobranca = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual bool FlagCorrespondencia
        {
            get { return _flagCorrespondencia; }
            set { _flagCorrespondencia = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual bool FlagFaturamento
        {
            get { return _flagFaturamento; }
            set { _flagFaturamento = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual bool FlagPublicacao
        {
            get { return _flagPublicacao; }
            set { _flagPublicacao = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual DateTime? InicioVigencia
        {
            get { return _inicioVigencia; }
            set { _inicioVigencia = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual DateTime? FimVigencia
        {
            get { return _fimVigencia; }
            set { _fimVigencia = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Observacao
        {
            get { return _observacao; }
            set { _observacao = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual Logradouro Logradouro
        {
            get { return _logradouro; }
            set { _logradouro = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual IList ListaTelefones
        {
            get { return _listaTelefones; }
            set { _listaTelefones = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual NeturionLog NeturionLog
        {
            get { return _neturionLog; }
            set { _neturionLog = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string HoraInicial
        {
            get { return _horaInicial; }
            set { _horaInicial = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string HoraFinal
        {
            get { return _horaFinal; }
            set { _horaFinal = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual EnumTipoResidencia EnumTipoResidencia
        {
            get { return _enumTipoResidencia; }
            set { _enumTipoResidencia = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual Pessoa Pessoa
        {
            get { return _pessoa; }
            set { _pessoa = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="telefone"></param>
        public virtual void AdicionarTelefone(Telefone telefone)
        {
            telefone.Endereco = this;
            ListaTelefones.Add(telefone);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="telefone"></param>
        public virtual void RemoverTelefone(Telefone telefone)
        {
            ListaTelefones.Remove(telefone);
        }
    }
}